iOS 逆向<3>:砸壳

砸壳, 指的是将从 App Store 上面下载的 App 进行破解的过程. 从 App Store 上下载的 ipa 包中的二进制文件是经过 Apple 加密(加壳)的,需要通过破解才能让我们对其 为所欲为, 这里的破解就是通常所说的砸壳.

准备工具

  1. iFunBox 或者 itools
  2. Clutch 或 dumpdecrypted
  3. 越狱手机一台

安装iFunBox

iFunBox 是一个可以浏览 iPhone 文件目录的文件管理工具, 支持 MacOS 和 Windows 两个平台.

点击 iFunBox 下载地址 可以去下载 MacOS 版本的 iFunBox,目前最新版本是 1.8,

安装 Apple File Conduit

要想使用 iFunBox 需要在 Cydia 中安装 Apple File Conduit”2”

在 Cydia 中搜索 Apple File Conduit, 如下图所示.

如果你没有搜索到, 需要自己添加对应的软件源地址.

点击【软件源】–编辑/添加 –输入源地址 apt.25pp.com – 添加源, 然后再去搜索 Apple File Conduit 安装.

安装好之后, 使用 iFunBox, 才能正常查看越狱后 iPhone 的系统目录,否则是无法通过 iFunBox 查看系统路径的。

使用 iFunBox

手机插上 USB 连接上 Mac 电脑, iFunBox 就可以识别你的手机,点击 Raw File System 其实是看不到 iPhone 的系统目录的, 接下来在 iPhone 中安装另外一个软件就可以了.

phone上的准备工作

mac上一些准备工作介绍完毕,下面开始iphone上的准备工作了,

砸壳:安装 Clutch

Clutch 源码地址, 然后自己在 MacOS 上面编译得到二进制文件.

Clutch 二进制包, 可直接使用, 目前最新 Clutch 版本为 2.0.4.

下载完成后, 存放为 ~/Downloads/Clutch

准备好越狱设备, 保证可以正常连接 wifi, 使用 scp 命令将 Clutch 二进制文件复制到设备的系统目录中, 命令如下:

scp ~/Downloads/Clutch root@10.105.12.42:/usr/bin

其中, 10.105.12.42 是越狱设备和Mac在同一个局域网连接 wifi 后的 IP 地址.

也可使用 iFunBox 把Clutch传输到越狱手机的/usr/bin路径下

Clutch 的使用

SSH 连接越狱设备,

ssh root@10.105.12.42

输入密码:alpine

给Clutch权限

chmod +x /usr/bin/Clutch

Clutch 命令选项如下:

-b --binary-dump     Only dump binary files from specified bundleID
-d --dump            Dump specified bundleID into .ipa file
-i --print-installed Print installed application
--clean              Clean /var/tmp/clutch directory
--version            Display version and exit
-? --help            Display this help and exit
-b 选项表示产出一个二进制文件, -d 选项表示产出一个 ipa 文件, -i 表示列出手机上面已经安装的 APP.

首先,我们先看一下手机上已经安装的 App, 命令如下:

Clutch -i

就会列出手机上已安装的 APP 列表,这些 APP 前面的数字表示指定的 id. -d 和 -b 选项都需要指定这些 id.

我们现在开始使用 Clutch 来对 APP 进行砸壳操作, 这里以已经安装的 App 序号为 6 的为例子.

使用下面的命令开始砸壳:

Clutch -d 6

效果如下图所示:

砸壳成功后会在 /private/var/mobile/Documents/Dumped 这个目录生成对应的 *.ipa 文件. 如下图所示

如下图砸快手就失败了,所以Clutch也不是万能的,具体问题还要具体分析

砸壳后的 ipa 文件, 可以从 iFunBox 中复制到 MacOS 的目录中, 然后你就可以对该 ipa 进行下一步操作了,后续的越狱工作, 在新更新的博客中会有提及。

三: 使用dumpdecrypted砸壳

dumpdecrypted 源码地址

我们要使用的是生成的动态库dumpdecrypted.dylib,要想得到dumpdecrypted.dylib这个动态库,只需要从github上下载代码,然后进行编译,生成dumpdecrypted.dylib即可。下方就是使用make命令对dumpdecrypted的源码进行编译。

make编译完成后,文件夹中就会多一个dumpdecrypted.dylib动态库,该动态库就是稍后我们砸壳使用的工具。

3.1 查找目标APP所在进程

砸壳后的分析工作

使用Clutchdumpdecrypted都是可以的,那个顺手用哪个,我们的关键认为是使用脱壳后的APP进行一些逆向工作,下面进行介绍。

把上一步生成的com.tencent.live4iphone-iOS9.0-(Clutch-2.0.4).ipa导入电脑,后缀改为com.tencent.live4iphone-iOS9.0-(Clutch-2.0.4).zip,然后解压,

然后右键显示包内容,根据关键字live4iphone,找到unix可执行文件:Mash-O文件

live4iphone可执行文件,拷贝到一个专门的文件夹,进行后续的导出头文件以及查看实现逻辑

五:class-dump导出脱壳App的头文件

class-dump 官方网址:http://stevenygard.com/projects/class-dump/

class-dump的作用就是把脱壳后Mach-O文件的class信息给dump出来(把类信息给导出来,包括私有方法),生成对应的.h头文件,没有脱壳是无法生生成头文件的

下载完工具包以后将class-dump文件复制到Mac的/usr/local/bin目录,这样在终端就能识别class-dump命令了

执行赋权限的代码

chmod +x /usr/local/bin/class-dump

命令的格式:class-dump -H Mach-O文件路径 -o 头文件存放目录

ps: -H表示要生成头文件 -O用于制定头文件的存放目录

下图是利用腾讯视频APP进行的头文件分析:

六:使用Hopper生成伪码

class-dump可以把是把脱壳后APP的Mach-O,头文件导出来,如果我们想看一下实现逻辑就要使用Hopper了

根据class-dump生成的头文件的方法,我们来看一下实现,如我们选择刚才Headers文件夹下的QLThirdPartyVideoTipView

这里看的比较模糊,

我们点击顶部菜单的if(b) f(x)菜单,即可生成较为接近伪码的逻辑。

至此,基本结束完整个砸壳以及导出头文件和查看逻辑实现的基本流程。学艺不精,如有疏漏,还望见谅。

各个版本xcode class dump的头文件

您的支持将鼓励我继续创作!